#!/usr/bin/env python
# -*- coding: UTF-8 -*-
'''
@Project ：图灵学习 
@File    ：19.线程回顾-线程池的使用.py
@IDE     ：PyCharm 
@Author  ：ChenLiGao
@Date    ：2024-11-04 15:35
'''
"""
    在python中创建线程池使用的是concurrent标准库完成线程池的创建
        concurrent是python的多任务的统一api：
            线程池的创建和进程池的创建否是通过concurrent创建的
"""

import time
import requests

from concurrent.futures import ThreadPoolExecutor

def get_images(url):
    response = requests.get(url).content

    file_name = url.rsplit("/")[-1]
    with open(file_name, "wb") as f:
        f.write(response)
        time.sleep(1)
        print("下载完成....")

    return 1

url_list = [
    "https://ww2.sinaimg.cn/mw690/008Dx8Yely1hre748fydoj30u00k0q65.jpg",
    "https://ww4.sinaimg.cn/mw690/008Dx8Yely1hrniembn9pj30gf0g8tbv.jpg",
    "https://wx1.sinaimg.cn/mw690/008Dx8Yely1hrp5nr0s79j30og0ogn08.jpg",
]
#
# # 单线程执行方式
# for url in url_list:
#     get_images(url)

# 创建线程池对象
pool = ThreadPoolExecutor(max_workers=2)

# 使用线程池提交任务
# 任务提交之后操作系统会调度上传的任务并执行
futures = [pool.submit(get_images, url) for url in url_list]
print(futures)

# 获取上传的任务返回值
for future in futures: # 当前这种获取返回值的顺序是和你上传的任务的顺序保持一致的
    print(future.result())